import_data("johnny_depp")
NAs introduzidos por coerção
filmes = read_imported_data()

Descrição do Ator

Johnny Depp é um ator, músico, produtor de cinema e diretor americano muito conhecido por interpretar grandes personangens como o Capitão Jack Sparrow na franquia Piratas do Caribe, Edward Scissorhands do filme Edward mãos de tesoura, além de interpretar outros personagens famosos, como o bruxo das trevas Gellert Grindelwald em Animais Fantásticos e Onde Habitam, de 2016, e Animais Fantásticos: Os Crimes de Grindelwald de 2018, Willy Wonka em A Fantástica Fábrica de Chocolate e o Chapeleiro Maluco nos filmes Alice no País das Maravilhas e Alice através do Espelho.

Seus filmes de maior bilheteria foram a série Piratas do Caribe com um total de 4.524 bilhões de dólares, seguido pela franquia Animais Fantásticos e Onde Habitam com 1.457 bilhão, Alice no País das Maravilhas com 1.323 bilhão em receita global.Trata-se de um ator renomadisímo de Hollywood, com mais de 250 indicações a prêmios por seu trabalho, incluindo Oscars, Globo de Ouro e Screen Actors Guild.

Depp é um dos maiores e mais bem sucedidos atores de sua geração, juntamente com Brad Pitt, Will Smith, Robert Downey Jr., Tom Cruise e Leonardo DiCaprio. o artista conta com uma imensidão de filmes em seu currículo. Aqui neste post trabalhamos com uma amostra de 29 filmes coletados pelo Rotten Tomatoes.

Bilheteria por ano

Podemos perceber que a maioria dos filmes alcançaram uma bilheteria até 200 milhoes de dólares. Mas não foram poucos os filmes que despontaram em bilheteria, a frânquia de Piratas do caribe, rendeu uma boa grana ao Capitão Jack Sparrow.

p = filmes %>% 
    ggplot(aes(x = ano, y = bilheteria, label=filme)) + 
    geom_point(color = paleta[2], size = 4)
ggplotly(p)

O gráfico abaixo reforça a ideia de que a maioria dos filmes estrelados por Johnny Depp não obteve tanto sucesso quanto a frânquia de Piratas do caribe. O único filme que chegou próximo foi, Alice no país das maravilhas. Algo a ser considerado nesta base de dados é que o filme mais recente analisado é de 2017 e que de lá pra cá o Ator ja estrelou em outros grandes filmes que renderam bilheterias estrondosas, como por exemplo: ALICE ATRAVÉS DO ESPELHO e ANIMAIS FANTÁSTICOS E ONDE HABITAM.

filmes %>% 
    ggplot(aes(x = bilheteria)) + 
    geom_histogram(binwidth = 15, fill = paleta[4], color = "white")+
    ylab("Quantidade")

E a avaliação geral dos filmes ???

Levando em consideração uma escala de 0-100, 18 dos 29 filmes citados em nossa base de dados tiveram uma avaliação positiva (considerando que positivo seria uma avaliação acima de 5). O filme com a melhor avaliação foi Deep Sea, seguido de GOnzo e Rango, que não foram filmes que renderam uma bilheteria muito alta, mas pra quem foi e assistiu, podemos ter certeza que não se arrependeram.

filmes %>% 
    ggplot(aes(x = reorder(filme,avaliacao), y=avaliacao, fill = paleta[4], color = "white")) + 
    geom_point(show.legend = FALSE)+
    coord_flip()+
    labs(x="Filme", y="Avaliação")

filmes %>% 
    ggplot(aes(x = avaliacao)) + 
    geom_histogram(binwidth = 10, boundary = 0, fill = paleta[4], color = "white") + 
    geom_rug(size = .5)+
    ylab("Quantidade")

Nem sempre bilheteria é sinônimo de boas avaliações !!

bilheteria_ano = filmes %>% 
    group_by(ano) %>% 
    summarise(bilheteria_mediana=median(bilheteria))
avaliacao_ano = filmes %>% 
    group_by(ano) %>% 
    summarise(avaliacao_mediana=median(avaliacao))
p = bilheteria_ano %>% 
    ggplot(aes(x=ano, y=bilheteria_mediana))+
    geom_line(color=paleta[2])+
    geom_point(color="red")
p2 = avaliacao_ano %>% 
    ggplot(aes(x=ano, y=avaliacao_mediana))+
    geom_line(color=paleta[2])+
    geom_point(color="red")
ggplotly(p)

ggplotly(p2)

Estrutura de grupos?

m_transformado = filmes %>% 
    mutate(bilheteria_log = as.vector(scale(log10(bilheteria))), 
           avaliacao_scaled = as.vector(scale(avaliacao)))
summary(m_transformado %>% select(bilheteria_log, avaliacao_scaled))
 bilheteria_log    avaliacao_scaled  
 Min.   :-2.5870   Min.   :-1.85100  
 1st Qu.:-0.3505   1st Qu.:-0.96059  
 Median : 0.1808   Median : 0.05702  
 Mean   : 0.0000   Mean   : 0.00000  
 3rd Qu.: 0.5830   3rd Qu.: 0.73543  
 Max.   : 1.4119   Max.   : 1.49864  
plot_clusgap = function(clusgap, title = "Gap Statistic calculation results") {
    require("ggplot2")
    gstab = data.frame(clusgap$Tab, k = 1:nrow(clusgap$Tab))
    p = ggplot(gstab, aes(k, gap)) + geom_line() + geom_point(size = 5)
    p = p + geom_errorbar(aes(ymax = gap + SE.sim, ymin = gap - SE.sim), width = .2)
    p = p + ggtitle(title)
    return(p)
}
gaps <- m_transformado %>% 
    select(bilheteria_log, avaliacao) %>% 
    clusGap(FUN = kmeans, nstart = 20, K.max = 8, B = 200)
Clustering k = 1,2,..., K.max (= 8): .. done
Bootstrapping, b = 1,2,..., B (= 200)  [one "." per sample]:
.................................................. 50 
.................................................. 100 
.................................................. 150 
.................................................. 200 
plot_clusgap(gaps)

set.seed(12345)
n_clusters = 5
# O agrupamento de fato:
cluster = m_transformado %>% 
    select(bilheteria_log, avaliacao_scaled) %>% 
    kmeans(centers = n_clusters, nstart = 20)
agrupado = cluster %>% 
    augment(m_transformado)
#p = agrupado %>% 
#    ggplot(aes(x = avaliacao_scaled, y = bilheteria_log, color = .cluster))  + 
#    geom_point(size = 3)
p1 = agrupado %>% 
    ggplot(aes(x = avaliacao, y = bilheteria, color = .cluster, label=filme))  + 
    geom_point(size = 3)+
    scale_y_log10()
ggscatter(agrupado, x="avaliacao", y="bilheteria", color=".cluster")+
    stat_chull(aes(fill = .cluster), alpha=0.3, geom="polygon")+
    xlab("Avaliação")+
    ylab("Bilheteria")

ggplotly(p1)
LS0tCnRpdGxlOiAiVGlwb3MgZGUgZmlsbWUgZGUgSm9obm55IERlcHAiCmF1dGhvcjogIklnb3IgTWF0aGV1cyBDYXN0b3IgRGluaXogUGluaGVpcm8iCm91dHB1dDoKICAgIGh0bWxfZG9jdW1lbnQ6CiAgICAgICAgZGZfcHJpbnQ6IHBhZ2VkCiAgICAgICAgdG9jOiB5ZXMKICAgICAgICB0b2NfZmxvYXQ6IHllcwogICAgaHRtbF9ub3RlYm9vazoKICAgICAgICB0b2M6IHllcwogICAgICAgIHRvY19mbG9hdDogeWVzCnRoZW1lOiBzYW5kc3RvbmUKLS0tCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShoZXJlKQpsaWJyYXJ5KGNsdXN0ZXIpCmxpYnJhcnkocGxvdGx5KQpsaWJyYXJ5KGdnZGVuZHJvKQpsaWJyYXJ5KGJyb29tKQpsaWJyYXJ5KGdncHVicikKCnNvdXJjZShoZXJlOjpoZXJlKCJjb2RlL2xpYi5SIikpCnRoZW1lX3NldCh0aGVtZV9yZXBvcnQoKSkKCmtuaXRyOjpvcHRzX2NodW5rJHNldCh0aWR5ID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgICAgICBmaWcud2lkdGggPSA2LAogICAgICAgICAgICAgICAgICAgICAgZmlnLmhlaWdodCA9IDUsCiAgICAgICAgICAgICAgICAgICAgICBlY2hvID0gVFJVRSkKCnBhbGV0YSA9IGMoIiM0MDRFNEQiLAogICAgICAgICAgICIjOTJEQ0U1IiwKICAgICAgICAgICAiIzkzOEJBMSIsCiAgICAgICAgICAgIiMyRDMxNDIiLAogICAgICAgICAgICIjRjQ3NDNCIikKYGBgCgpgYGB7cn0KaW1wb3J0X2RhdGEoImpvaG5ueV9kZXBwIikKYGBgCgoKYGBge3IgcmVhZH0KZmlsbWVzID0gcmVhZF9pbXBvcnRlZF9kYXRhKCkKYGBgCgojIERlc2NyacOnw6NvIGRvIEF0b3IKCkpvaG5ueSBEZXBwIMOpIHVtIGF0b3IsIG3DunNpY28sIHByb2R1dG9yIGRlIGNpbmVtYSBlIGRpcmV0b3IgYW1lcmljYW5vIG11aXRvIGNvbmhlY2lkbyBwb3IgaW50ZXJwcmV0YXIgZ3JhbmRlcyBwZXJzb25hbmdlbnMgY29tbyBvIENhcGl0w6NvIEphY2sgU3BhcnJvdyBuYSBmcmFucXVpYSBQaXJhdGFzIGRvIENhcmliZSwgRWR3YXJkIFNjaXNzb3JoYW5kcyBkbyBmaWxtZSBFZHdhcmQgbcOjb3MgZGUgdGVzb3VyYSwgYWzDqW0gZGUgaW50ZXJwcmV0YXIgb3V0cm9zIHBlcnNvbmFnZW5zIGZhbW9zb3MsIGNvbW8gbyBicnV4byBkYXMgdHJldmFzIEdlbGxlcnQgR3JpbmRlbHdhbGQgZW0gQW5pbWFpcyBGYW50w6FzdGljb3MgZSBPbmRlIEhhYml0YW0sIGRlIDIwMTYsIGUgQW5pbWFpcyBGYW50w6FzdGljb3M6IE9zIENyaW1lcyBkZSBHcmluZGVsd2FsZCBkZSAyMDE4LCBXaWxseSBXb25rYSBlbSBBIEZhbnTDoXN0aWNhIEbDoWJyaWNhIGRlIENob2NvbGF0ZSBlIG8gQ2hhcGVsZWlybyBNYWx1Y28gbm9zIGZpbG1lcyBBbGljZSBubyBQYcOtcyBkYXMgTWFyYXZpbGhhcyBlIEFsaWNlIGF0cmF2w6lzIGRvIEVzcGVsaG8uCgpTZXVzIGZpbG1lcyBkZSBtYWlvciBiaWxoZXRlcmlhIGZvcmFtIGEgc8OpcmllIFBpcmF0YXMgZG8gQ2FyaWJlIGNvbSB1bSB0b3RhbCBkZSA0LjUyNCBiaWxow7VlcyBkZSBkw7NsYXJlcywgc2VndWlkbyBwZWxhIGZyYW5xdWlhIEFuaW1haXMgRmFudMOhc3RpY29zIGUgT25kZSBIYWJpdGFtIGNvbSAxLjQ1NyBiaWxow6NvLCBBbGljZSBubyBQYcOtcyBkYXMgTWFyYXZpbGhhcyBjb20gMS4zMjMgYmlsaMOjbyBlbSByZWNlaXRhIGdsb2JhbC5UcmF0YS1zZSBkZSB1bSBhdG9yIHJlbm9tYWRpc8OtbW8gZGUgSG9sbHl3b29kLCBjb20gbWFpcyBkZSAyNTAgaW5kaWNhw6fDtWVzIGEgcHLDqm1pb3MgcG9yIHNldSB0cmFiYWxobywgaW5jbHVpbmRvIE9zY2FycywgR2xvYm8gZGUgT3VybyBlIFNjcmVlbiBBY3RvcnMgR3VpbGQuIAoKRGVwcCDDqSB1bSBkb3MgbWFpb3JlcyBlIG1haXMgYmVtIHN1Y2VkaWRvcyBhdG9yZXMgZGUgc3VhIGdlcmHDp8OjbywganVudGFtZW50ZSBjb20gQnJhZCBQaXR0LCBXaWxsIFNtaXRoLCBSb2JlcnQgRG93bmV5IEpyLiwgVG9tIENydWlzZSBlIExlb25hcmRvIERpQ2FwcmlvLiBvIGFydGlzdGEgY29udGEgY29tIHVtYSBpbWVuc2lkw6NvIGRlIGZpbG1lcyBlbSBzZXUgY3VycsOtY3Vsby4gQXF1aSBuZXN0ZSBwb3N0IHRyYWJhbGhhbW9zIGNvbSB1bWEgYW1vc3RyYSBkZSAyOSBmaWxtZXMgY29sZXRhZG9zIHBlbG8gUm90dGVuIFRvbWF0b2VzLiAKCiMjIEJpbGhldGVyaWEgcG9yIGFubwoKUG9kZW1vcyBwZXJjZWJlciBxdWUgYSBtYWlvcmlhIGRvcyBmaWxtZXMgYWxjYW7Dp2FyYW0gdW1hIGJpbGhldGVyaWEgYXTDqSAyMDAgbWlsaG9lcyBkZSBkw7NsYXJlcy4gTWFzIG7Do28gZm9yYW0gcG91Y29zIG9zIGZpbG1lcyBxdWUgZGVzcG9udGFyYW0gZW0gYmlsaGV0ZXJpYSwgYSBmcsOibnF1aWEgZGUgUGlyYXRhcyBkbyBjYXJpYmUsIHJlbmRldSB1bWEgYm9hIGdyYW5hIGFvIENhcGl0w6NvIEphY2sgU3BhcnJvdy4gCgpgYGB7cn0KCnAgPSBmaWxtZXMgJT4lIAogICAgZ2dwbG90KGFlcyh4ID0gYW5vLCB5ID0gYmlsaGV0ZXJpYSwgbGFiZWw9ZmlsbWUpKSArIAogICAgZ2VvbV9wb2ludChjb2xvciA9IHBhbGV0YVsyXSwgc2l6ZSA9IDQpCgpnZ3Bsb3RseShwKQoKYGBgCgpPIGdyw6FmaWNvIGFiYWl4byByZWZvcsOnYSBhIGlkZWlhIGRlIHF1ZSBhIG1haW9yaWEgZG9zIGZpbG1lcyBlc3RyZWxhZG9zIHBvciBKb2hubnkgRGVwcCBuw6NvIG9idGV2ZSB0YW50byBzdWNlc3NvIHF1YW50byBhIGZyw6JucXVpYSBkZSBQaXJhdGFzIGRvIGNhcmliZS4gTyDDum5pY28gZmlsbWUgcXVlIGNoZWdvdSBwcsOzeGltbyBmb2ksIEFsaWNlIG5vIHBhw61zIGRhcyBtYXJhdmlsaGFzLiBBbGdvIGEgc2VyIGNvbnNpZGVyYWRvIG5lc3RhIGJhc2UgZGUgZGFkb3Mgw6kgcXVlIG8gZmlsbWUgbWFpcyByZWNlbnRlIGFuYWxpc2FkbyDDqSBkZSAyMDE3IGUgcXVlIGRlIGzDoSBwcmEgY8OhIG8gQXRvciBqYSBlc3RyZWxvdSBlbSBvdXRyb3MgZ3JhbmRlcyBmaWxtZXMgcXVlIHJlbmRlcmFtIGJpbGhldGVyaWFzIGVzdHJvbmRvc2FzLCBjb21vIHBvciBleGVtcGxvOiBBTElDRSBBVFJBVsOJUyBETyBFU1BFTEhPIGUgQU5JTUFJUyBGQU5Uw4FTVElDT1MgRSBPTkRFIEhBQklUQU0uCgpgYGB7cn0KZmlsbWVzICU+JSAKICAgIGdncGxvdChhZXMoeCA9IGJpbGhldGVyaWEpKSArIAogICAgZ2VvbV9oaXN0b2dyYW0oYmlud2lkdGggPSAxNSwgZmlsbCA9IHBhbGV0YVs0XSwgY29sb3IgPSAid2hpdGUiKSsKICAgIHlsYWIoIlF1YW50aWRhZGUiKQpgYGAKCiMjIEUgYSBhdmFsaWHDp8OjbyBnZXJhbCBkb3MgZmlsbWVzID8/PwoKTGV2YW5kbyBlbSBjb25zaWRlcmHDp8OjbyB1bWEgZXNjYWxhIGRlIDAtMTAwLCAxOCBkb3MgMjkgZmlsbWVzIGNpdGFkb3MgZW0gbm9zc2EgYmFzZSBkZSBkYWRvcyB0aXZlcmFtIHVtYSBhdmFsaWHDp8OjbyBwb3NpdGl2YSAoY29uc2lkZXJhbmRvIHF1ZSBwb3NpdGl2byBzZXJpYSB1bWEgYXZhbGlhw6fDo28gYWNpbWEgZGUgNSkuIE8gZmlsbWUgY29tIGEgbWVsaG9yIGF2YWxpYcOnw6NvIGZvaSBEZWVwIFNlYSwgc2VndWlkbyBkZSBHT256byBlIFJhbmdvLCBxdWUgbsOjbyBmb3JhbSBmaWxtZXMgcXVlIHJlbmRlcmFtIHVtYSBiaWxoZXRlcmlhIG11aXRvIGFsdGEsIG1hcyBwcmEgcXVlbSBmb2kgZSBhc3Npc3RpdSwgcG9kZW1vcyB0ZXIgY2VydGV6YSBxdWUgbsOjbyBzZSBhcnJlcGVuZGVyYW0uCgpgYGB7cn0KZmlsbWVzICU+JSAKICAgIGdncGxvdChhZXMoeCA9IHJlb3JkZXIoZmlsbWUsYXZhbGlhY2FvKSwgeT1hdmFsaWFjYW8sIGZpbGwgPSBwYWxldGFbNF0sIGNvbG9yID0gIndoaXRlIikpICsgCiAgICBnZW9tX3BvaW50KHNob3cubGVnZW5kID0gRkFMU0UpKwogICAgY29vcmRfZmxpcCgpKwogICAgbGFicyh4PSJGaWxtZSIsIHk9IkF2YWxpYcOnw6NvIikKCmZpbG1lcyAlPiUgCiAgICBnZ3Bsb3QoYWVzKHggPSBhdmFsaWFjYW8pKSArIAogICAgZ2VvbV9oaXN0b2dyYW0oYmlud2lkdGggPSAxMCwgYm91bmRhcnkgPSAwLCBmaWxsID0gcGFsZXRhWzRdLCBjb2xvciA9ICJ3aGl0ZSIpICsgCiAgICBnZW9tX3J1ZyhzaXplID0gLjUpKwogICAgeWxhYigiUXVhbnRpZGFkZSIpCmBgYAoKIyMgTmVtIHNlbXByZSBiaWxoZXRlcmlhIMOpIHNpbsO0bmltbyBkZSBib2FzIGF2YWxpYcOnw7VlcyAhIQoKYGBge3J9CmJpbGhldGVyaWFfYW5vID0gZmlsbWVzICU+JSAKICAgIGdyb3VwX2J5KGFubykgJT4lIAogICAgc3VtbWFyaXNlKGJpbGhldGVyaWFfbWVkaWFuYT1tZWRpYW4oYmlsaGV0ZXJpYSkpCgphdmFsaWFjYW9fYW5vID0gZmlsbWVzICU+JSAKICAgIGdyb3VwX2J5KGFubykgJT4lIAogICAgc3VtbWFyaXNlKGF2YWxpYWNhb19tZWRpYW5hPW1lZGlhbihhdmFsaWFjYW8pKQoKcCA9IGJpbGhldGVyaWFfYW5vICU+JSAKICAgIGdncGxvdChhZXMoeD1hbm8sIHk9YmlsaGV0ZXJpYV9tZWRpYW5hKSkrCiAgICBnZW9tX2xpbmUoY29sb3I9cGFsZXRhWzJdKSsKICAgIGdlb21fcG9pbnQoY29sb3I9InJlZCIpCgpwMiA9IGF2YWxpYWNhb19hbm8gJT4lIAogICAgZ2dwbG90KGFlcyh4PWFubywgeT1hdmFsaWFjYW9fbWVkaWFuYSkpKwogICAgZ2VvbV9saW5lKGNvbG9yPXBhbGV0YVsyXSkrCiAgICBnZW9tX3BvaW50KGNvbG9yPSJyZWQiKQoKZ2dwbG90bHkocCkKZ2dwbG90bHkocDIpCgpgYGAKCgojIyBFc3RydXR1cmEgZGUgZ3J1cG9zPwoKYGBge3J9Cm1fdHJhbnNmb3JtYWRvID0gZmlsbWVzICU+JSAKICAgIG11dGF0ZShiaWxoZXRlcmlhX2xvZyA9IGFzLnZlY3RvcihzY2FsZShsb2cxMChiaWxoZXRlcmlhKSkpLCAKICAgICAgICAgICBhdmFsaWFjYW9fc2NhbGVkID0gYXMudmVjdG9yKHNjYWxlKGF2YWxpYWNhbykpKQoKc3VtbWFyeShtX3RyYW5zZm9ybWFkbyAlPiUgc2VsZWN0KGJpbGhldGVyaWFfbG9nLCBhdmFsaWFjYW9fc2NhbGVkKSkKYGBgCgpgYGB7cn0KcGxvdF9jbHVzZ2FwID0gZnVuY3Rpb24oY2x1c2dhcCwgdGl0bGUgPSAiR2FwIFN0YXRpc3RpYyBjYWxjdWxhdGlvbiByZXN1bHRzIikgewogICAgcmVxdWlyZSgiZ2dwbG90MiIpCiAgICBnc3RhYiA9IGRhdGEuZnJhbWUoY2x1c2dhcCRUYWIsIGsgPSAxOm5yb3coY2x1c2dhcCRUYWIpKQogICAgcCA9IGdncGxvdChnc3RhYiwgYWVzKGssIGdhcCkpICsgZ2VvbV9saW5lKCkgKyBnZW9tX3BvaW50KHNpemUgPSA1KQogICAgcCA9IHAgKyBnZW9tX2Vycm9yYmFyKGFlcyh5bWF4ID0gZ2FwICsgU0Uuc2ltLCB5bWluID0gZ2FwIC0gU0Uuc2ltKSwgd2lkdGggPSAuMikKICAgIHAgPSBwICsgZ2d0aXRsZSh0aXRsZSkKICAgIHJldHVybihwKQp9CgpgYGAKCmBgYHtyfQpnYXBzIDwtIG1fdHJhbnNmb3JtYWRvICU+JSAKICAgIHNlbGVjdChiaWxoZXRlcmlhX2xvZywgYXZhbGlhY2FvKSAlPiUgCiAgICBjbHVzR2FwKEZVTiA9IGttZWFucywgbnN0YXJ0ID0gMjAsIEsubWF4ID0gOCwgQiA9IDIwMCkKCnBsb3RfY2x1c2dhcChnYXBzKQpgYGAKCmBgYHtyfQpzZXQuc2VlZCgxMjM0NSkKbl9jbHVzdGVycyA9IDUKCiMgTyBhZ3J1cGFtZW50byBkZSBmYXRvOgpjbHVzdGVyID0gbV90cmFuc2Zvcm1hZG8gJT4lIAogICAgc2VsZWN0KGJpbGhldGVyaWFfbG9nLCBhdmFsaWFjYW9fc2NhbGVkKSAlPiUgCiAgICBrbWVhbnMoY2VudGVycyA9IG5fY2x1c3RlcnMsIG5zdGFydCA9IDIwKQoKYWdydXBhZG8gPSBjbHVzdGVyICU+JSAKICAgIGF1Z21lbnQobV90cmFuc2Zvcm1hZG8pCgojcCA9IGFncnVwYWRvICU+JSAKIyAgICBnZ3Bsb3QoYWVzKHggPSBhdmFsaWFjYW9fc2NhbGVkLCB5ID0gYmlsaGV0ZXJpYV9sb2csIGNvbG9yID0gLmNsdXN0ZXIpKSAgKyAKIyAgICBnZW9tX3BvaW50KHNpemUgPSAzKQoKcDEgPSBhZ3J1cGFkbyAlPiUgCiAgICBnZ3Bsb3QoYWVzKHggPSBhdmFsaWFjYW8sIHkgPSBiaWxoZXRlcmlhLCBjb2xvciA9IC5jbHVzdGVyLCBsYWJlbD1maWxtZSkpICArIAogICAgZ2VvbV9wb2ludChzaXplID0gMykrCiAgICBzY2FsZV95X2xvZzEwKCkKCmdnc2NhdHRlcihhZ3J1cGFkbywgeD0iYXZhbGlhY2FvIiwgeT0iYmlsaGV0ZXJpYSIsIGNvbG9yPSIuY2x1c3RlciIpKwogICAgc3RhdF9jaHVsbChhZXMoZmlsbCA9IC5jbHVzdGVyKSwgYWxwaGE9MC4zLCBnZW9tPSJwb2x5Z29uIikrCiAgICB4bGFiKCJBdmFsaWHDp8OjbyIpKwogICAgeWxhYigiQmlsaGV0ZXJpYSIpCgpnZ3Bsb3RseShwMSkKCgpgYGAKCgoKCgo=